import { compact } from "../array";
import { hasOwn, isArray, isObject } from "../shared";

/**
 * 删除对象中的空值，包括 undefined、null、''、false、NaN，不包括 0。
 * isDeep 为 true 时，深度遍历对象。includeArr 为 true，会继续对象数组中的空值（调用 compact）。
 * @param object - 目标对象
 * @param isDeep - 是否深度处理
 * @param includeArr - 是否处理对象数组
 * @returns 处理完的对象
 */
export function removeFalsyValues(object: Object, isDeep: Boolean = false, includeArr: Boolean = false) {
    if(!isObject(object)) return object
    const newObject = {}
    for (const key in object) {
        if (!hasOwn(object, key)) continue

        const item = object[key];
        if(!item && item !== 0) continue

        if(!isArray(item)) {
            newObject[key] = (isObject(item) && isDeep) 
                ? removeFalsyValues(item, isDeep) 
                : item
            continue
        }
        newObject[key] = includeArr ? compact(item) : item
    }
    return newObject
}